package com.qjc.demo.algorithm;

import java.util.Arrays;

/**
 * @ClassName: ArrayCenterIndex
 * @Description: 给定一个整数数组nums，请编写一个能够返回数组"中心下标"的方法。
 * 中心下标是数组的一个下标，期左侧所有元素相加的和等于右侧所有元素相加的和。
 * 如果数组不存在中心下标，返回-1。如果数组中有多个中心下标，应该返回靠最左边的那一个。
 * 注意：中心下标有可能出现在数组的两端
 * @Author: qjc
 * @Date: 2022/5/5 4:36 PM
 */
public class ArrayCenterIndex {

    // 返回中心下标
    public static int centerIndex(int[] nums) {
        // 总和：先计算出整个数组的总和
        int sum = Arrays.stream(nums).sum();
        // 叠加和：计算数组叠加的和
        int total = 0;
        for (int i = 0; i < nums.length; i++) {
            // 叠加递增该元素
            total += nums[i];
            if (total == sum) {
                return i;
            }
            // 总和递减该元素
            sum -= nums[i];
        }
        return -1;
    }

    public static void main(String[] args) {
        System.out.println(centerIndex(new int[]{1, 7, 3, 6, 5, 6}));
    }

}

